﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ModelingProjectLib.Interfaces;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Windows.Input;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows;

namespace INSAwarsWPF
{
    public class EnsembleJoueursViewModel : ObservableCollection<JoueurViewModel>
    {
        public IEnumerator<JoueurViewModel> enumJoueur { get; private set; }
        public GameViewModel Conteneur { get; private set; }

        public EnsembleJoueursViewModel(GameViewModel _gvm)
        {
            Conteneur = _gvm;
        }

        public void DoApresRemplissage()
        {
            // la liste est complète : on peut prendre un énumérateur pour le joueur courant
            enumJoueur = this.GetEnumerator();
            enumJoueur.MoveNext(); // on va sur le premier élément : IMPORTANT
        }

        public void joueurSuivant()
        {
            JoueurViewModel joueurOld = enumJoueur.Current;
            if (!enumJoueur.MoveNext())
            {
                enumJoueur.Reset();
                enumJoueur.MoveNext();
            }
            JoueurViewModel joueurNew = enumJoueur.Current;

            // on effectue le changement de contexte pour la vue (sélection...)
            changementJoueur(joueurOld, joueurNew);

            // on met à jour le modèle
            Conteneur.PartieCourante.joueurSuivant();
        }

        private void changementJoueur(JoueurViewModel _old, JoueurViewModel _new)
        {
            // a gérer : si l'unité est détruite au tour d'avant...

            _old.DerniereCaseSelectionnee = Conteneur.SelectedCase;
            _old.DerniereUniteSelectionnee = Conteneur.SelectedCase.SelectedUnite;

            Conteneur.SelectedCase = _new.DerniereCaseSelectionnee;
            Conteneur.SelectedCase.SelectedUnite = _new.DerniereUniteSelectionnee;

            // keyboard focus :
            Conteneur.View.focusOnSelectedUnite();
        }
    }
}
